receive_web_request can also now receive the ActionDispatch request object

Albert Sun 9 anni fa
parent
commit
9ddb4e97de

+ 2 - 2
app/controllers/web_requests_controller.rb

@@ -24,7 +24,7 @@ class WebRequestsController < ApplicationController
24 24
     if user
25 25
       agent = user.agents.find_by_id(params[:agent_id])
26 26
       if agent
27
-        content, status, content_type = agent.trigger_web_request(params.except(:action, :controller, :agent_id, :user_id, :format), request.method_symbol.to_s, request.format.to_s, request.headers)
27
+        content, status, content_type = agent.trigger_web_request(params.except(:action, :controller, :agent_id, :user_id, :format), request.method_symbol.to_s, request.format.to_s, request.headers, request)
28 28
 
29 29
         if content.is_a?(String)
30 30
           render :text => content, :status => status || 200, :content_type => content_type || 'text/plain'
@@ -47,7 +47,7 @@ class WebRequestsController < ApplicationController
47 47
       secret = params[:secret]
48 48
       user.agents.of_type(Agents::UserLocationAgent).each { |agent|
49 49
         if agent.options[:secret] == secret
50
-          agent.trigger_web_request(params.except(:action, :controller, :user_id, :format), request.method_symbol.to_s, request.format.to_s, request.headers)
50
+          agent.trigger_web_request(params.except(:action, :controller, :user_id, :format), request.method_symbol.to_s, request.format.to_s, request.headers, request)
51 51
         end
52 52
       }
53 53
       render :text => "ok"

+ 8 - 8
app/models/agent.rb

@@ -95,7 +95,7 @@ class Agent < ActiveRecord::Base
95 95
     false
96 96
   end
97 97
 
98
-  def receive_web_request(params, method, format, headers={})
98
+  def receive_web_request(params, method, format, headers={}, request=ActionDispatch::Request.new({}))
99 99
     # Implement me in your subclass of Agent.
100 100
     ["not implemented", 404]
101 101
   end
@@ -149,20 +149,20 @@ class Agent < ActiveRecord::Base
149 149
     end
150 150
   end
151 151
 
152
-  def trigger_web_request(params, method, format, headers)
152
+  def trigger_web_request(params, method, format, headers, request)
153 153
     if respond_to?(:receive_webhook)
154 154
       Rails.logger.warn "DEPRECATED: The .receive_webhook method is deprecated, please switch your Agent to use .receive_web_request."
155 155
       receive_webhook(params).tap do
156 156
         self.last_web_request_at = Time.now
157 157
         save!
158 158
       end
159
-    elsif method(:receive_web_request).arity == 3
160
-      receive_web_request(params, method, format).tap do
161
-        self.last_web_request_at = Time.now
162
-        save!
163
-      end
164 159
     else
165
-      receive_web_request(params, method, format, headers).tap do
160
+      if method(:receive_web_request).arity == 3
161
+        handled_request = receive_web_request(params, method, format)
162
+      else
163
+        handled_request = receive_web_request(params, method, format, headers, request)
164
+      end
165
+      handled_request.tap do
166 166
         self.last_web_request_at = Time.now
167 167
         save!
168 168
       end

+ 1 - 1
app/models/agents/data_output_agent.rb

@@ -160,7 +160,7 @@ module Agents
160 160
       interpolated['push_hubs'].presence || []
161 161
     end
162 162
 
163
-    def receive_web_request(params, method, format, headers={})
163
+    def receive_web_request(params, method, format, headers={}, request=ActionDispatch::Request.new({}))
164 164
       unless interpolated['secrets'].include?(params['secret'])
165 165
         if format =~ /json/
166 166
           return [{ error: "Not Authorized" }, 401]

+ 1 - 1
app/models/agents/twilio_agent.rb

@@ -81,7 +81,7 @@ module Agents
81 81
       "#{server_url}/users/#{user.id}/web_requests/#{id}/#{secret}"
82 82
     end
83 83
 
84
-    def receive_web_request(params, method, format, headers={})
84
+    def receive_web_request(params, method, format, headers={}, request=ActionDispatch::Request.new({}))
85 85
       if memory['pending_calls'].has_key? params['secret']
86 86
         response = Twilio::TwiML::Response.new {|r| r.Say memory['pending_calls'][params['secret']], :voice => 'woman'}
87 87
         memory['pending_calls'].delete params['secret']

+ 1 - 1
app/models/agents/user_location_agent.rb

@@ -57,7 +57,7 @@ module Agents
57 57
       end
58 58
     end
59 59
 
60
-    def receive_web_request(params, method, format, headers={})
60
+    def receive_web_request(params, method, format, headers={}, request=ActionDispatch::Request.new({}))
61 61
       params = params.symbolize_keys
62 62
       if method != 'post'
63 63
         return ['Not Found', 404]

+ 1 - 1
app/models/agents/webhook_agent.rb

@@ -45,7 +45,7 @@ module Agents
45 45
       }
46 46
     end
47 47
 
48
-    def receive_web_request(params, method, format, headers={})
48
+    def receive_web_request(params, method, format, headers={}, request=ActionDispatch::Request.new({}))
49 49
       # check the secret
50 50
       secret = params.delete('secret')
51 51
       return ["Not Authorized", 401] unless secret == interpolated['secret']

+ 1 - 1
spec/controllers/web_requests_controller_spec.rb

@@ -5,7 +5,7 @@ describe WebRequestsController do
5 5
     cannot_receive_events!
6 6
     cannot_be_scheduled!
7 7
 
8
-    def receive_web_request(params, method, format, headers={})
8
+    def receive_web_request(params, method, format, headers={}, request=ActionDispatch::Request.new({}))
9 9
       if params.delete(:secret) == options[:secret]
10 10
         memory[:web_request_values] = params
11 11
         memory[:web_request_format] = format

+ 5 - 5
spec/models/agent_spec.rb

@@ -729,20 +729,20 @@ describe Agent do
729 729
         @agent.user = users(:bob)
730 730
         @agent.save!
731 731
 
732
-        def @agent.receive_web_request(params, method, format, headers={})
732
+        def @agent.receive_web_request(params, method, format, headers={}, request=ActionDispatch::Request.new({}))
733 733
           memory['last_request'] = [params, method, format, headers]
734 734
           ['Ok!', 200]
735 735
         end
736 736
       end
737 737
 
738 738
       it "calls the .receive_web_request hook, updates last_web_request_at, and saves" do
739
-        @agent.trigger_web_request({ :some_param => "some_value" }, "post", "text/html", {})
739
+        @agent.trigger_web_request({ :some_param => "some_value" }, "post", "text/html", {}, ActionDispatch::Request.new({}))
740 740
         expect(@agent.reload.memory['last_request']).to eq([ { "some_param" => "some_value" }, "post", "text/html", {} ])
741 741
         expect(@agent.last_web_request_at.to_i).to be_within(1).of(Time.now.to_i)
742 742
       end
743 743
     end
744 744
 
745
-    context "when .receive_web_request is defined without headers" do
745
+    context "when .receive_web_request is defined without headers or request" do
746 746
       before do
747 747
         @agent = Agents::WebRequestReceiver.new(:name => "something")
748 748
         @agent.user = users(:bob)
@@ -755,7 +755,7 @@ describe Agent do
755 755
       end
756 756
 
757 757
       it "calls the .trigger_web_request with headers, but they don't get passed to .receive_web_request" do
758
-        @agent.trigger_web_request({ :some_param => "some_value" }, "post", "text/html", {})
758
+        @agent.trigger_web_request({ :some_param => "some_value" }, "post", "text/html", {}, ActionDispatch::Request.new({}))
759 759
         expect(@agent.reload.memory['last_request']).to eq([ { "some_param" => "some_value" }, "post", "text/html" ])
760 760
         expect(@agent.last_web_request_at.to_i).to be_within(1).of(Time.now.to_i)
761 761
       end
@@ -775,7 +775,7 @@ describe Agent do
775 775
 
776 776
       it "outputs a deprecation warning and calls .receive_webhook with the params" do
777 777
         mock(Rails.logger).warn("DEPRECATED: The .receive_webhook method is deprecated, please switch your Agent to use .receive_web_request.")
778
-        @agent.trigger_web_request({ :some_param => "some_value" }, "post", "text/html", {})
778
+        @agent.trigger_web_request({ :some_param => "some_value" }, "post", "text/html", {}, ActionDispatch::Request.new({}))
779 779
         expect(@agent.reload.memory['last_webhook_request']).to eq({ "some_param" => "some_value" })
780 780
         expect(@agent.last_web_request_at.to_i).to be_within(1).of(Time.now.to_i)
781 781
       end